package br.com.trabalho.entidades;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;

@Entity
public class Receita implements Serializable{
    
    private static final long serialVersionUID = 563468426729621572L;
    
    private String nome;
    
    private String descricao;
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="receita_id_seq")
    @SequenceGenerator(name="receita_id_seq", sequenceName="receita_id_seq", allocationSize=1)
    private Integer id;
    
    private Long media;
    
    private Integer tempo;
    
    private Integer valorNutricional;
    
    private String categoria;
    
    @OneToMany(mappedBy = "receita",fetch = FetchType.EAGER,cascade = CascadeType.ALL,orphanRemoval = true)
    private List<Ingrediente> ingredientes = new ArrayList<>();
    
    private String preparacao;
    
    private String modoDeServir;
    
    private Integer porcoes;
    
    private String metodoCozimento;
    
    private boolean disponivel;
    
    @ManyToOne(cascade = CascadeType.MERGE)
    @JoinColumn(name = "usuario_id")
    private Usuario autor;
    
    @OneToMany(mappedBy = "receita",fetch = FetchType.EAGER)
    private List<Comentario> comentarios = new ArrayList<>();

    public Integer getPorcoes() {
        return porcoes;
    }

    public void setPorcoes(Integer porcoes) {
        this.porcoes = porcoes;
    }

    public String getMetodoCozimento() {
        return metodoCozimento;
    }

    public void setMetodoCozimento(String metodoCozimento) {
        this.metodoCozimento = metodoCozimento;
    }
    
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Long getMedia() {
        return media;
    }

    public void setMedia(Long media) {
        this.media = media;
    }

    public String getCategoria() {
        return categoria;
    }

    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

    public List<Ingrediente> getIngredientes() {
        return ingredientes;
    }

    public void setIngredientes(List<Ingrediente> ingredientes) {
        this.ingredientes = ingredientes;
    }

    public String getPreparacao() {
        return preparacao;
    }

    public void setPreparacao(String preparacao) {
        this.preparacao = preparacao;
    }

    public String getModoDeServir() {
        return modoDeServir;
    }

    public void setModoDeServir(String modoDeServir) {
        this.modoDeServir = modoDeServir;
    }

    public Integer getTempo() {
        return tempo;
    }

    public void setTempo(Integer tempo) {
        this.tempo = tempo;
    }

    public Integer getValorNutricional() {
        return valorNutricional;
    }

    public void setValorNutricional(Integer valorNutricional) {
        this.valorNutricional = valorNutricional;
    }

    public boolean isDisponivel() {
        return disponivel;
    }

    public void setDisponivel(boolean disponivel) {
        this.disponivel = disponivel;
    }   

    public List<Comentario> getComentarios() {
        return comentarios;
    }

    public void setComentarios(List<Comentario> comentarios) {
        this.comentarios = comentarios;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Usuario getAutor() {
        return autor;
    }

    public void setAutor(Usuario autor) {
        this.autor = autor;
    }    
}
